

//应该和前端约定好一个响应头，为jwt过期时间，直接获取无须解析

//package com.yanjue.filter;
//
//import com.yanjue.common.constant.JwtConstant;
//import com.yanjue.common.util.JwtUtil;
//import io.jsonwebtoken.Claims;
//import io.jsonwebtoken.Jwts;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.cloud.gateway.filter.GatewayFilterChain;
//import org.springframework.cloud.gateway.filter.GlobalFilter;
//import org.springframework.core.Ordered;
//import org.springframework.stereotype.Component;
//import org.springframework.web.server.ServerWebExchange;
//import reactor.core.publisher.Mono;
//
//import java.util.Date;
//
///**
// * 刷新token
// */
//@Component
//@Slf4j
//public class RefreshTokenFilter implements GlobalFilter,Ordered {
//
//    private static final long THRESHOLD_TIME = 1000 * 60 * 60 * 12;
//
//    @Override
//    public int getOrder() {
//        return 0;
//    }
//
//    @Override
//    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
//        //1.获取token
//        String token = exchange.getRequest().getHeaders().getFirst("token");
//
//        if (token != null){
//            //检查token是否快要过期 (还有半天过期)
//            if(isTokenExpiringSoon(token)){
//                //刷新过期时间
//                String newToken = refreshTokenExpiry(token,exchange);
//
//                //将新的 token 添加到响应头中 刷新前端（可惜前端没写）"newToken"newtoken,双jwt
//                exchange.getRequest().getHeaders().set("token",newToken);
//            }
//        }
//
//        return chain.filter(exchange);
//    }
//
//    /**
//     * 刷新token
//     *
//     * @param token
//     * @param exchange
//     * @return
//     */
//    private String refreshTokenExpiry(String token, ServerWebExchange exchange) {
//        // 解析原 token 获取用户信息
//        Claims claims = Jwts.parser()
//                .setSigningKey(JwtConstant.SECRET_KEY)
//                .parseClaimsJws(token)
//                .getBody();
//
//
//        JwtUtil.buildJwt(JwtConstant.EXPIRE_DAY,)
//
//
//        claims.setExpiration(JwtConstant.EXPIRE_DAY);
//    }
//
//    /**
//     * token是否快要过期，半天以下
//     * @param token
//     * @return
//     */
//    private boolean isTokenExpiringSoon(String token) {
//        try {
//            // 解析 token 获取过期时间
//            Claims claims = Jwts.parser()
//                    .setSigningKey(JwtConstant.SECRET_KEY)
//                    .parseClaimsJws(token)
//                    .getBody();
//
//            Date expiration = claims.getExpiration();
//            long currentTimeMillis = System.currentTimeMillis();
//
//            // 判断 token 是否在半天（12小时）内过期
//            return (expiration.getTime() - currentTimeMillis) < THRESHOLD_TIME;
//        } catch (Exception e) {
//            log.error("Token解析失败: {}", e.getMessage());
//            return false; // 如果解析失败，认为 token 不可用
//        }
//
//    }
//}
